package com.example.project.data.generator;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.HashMap;

/**
 * @author sunyizhen011
 * @version 1.0
 * @description 代码生成工具
 * @date 2022/12/12 13:53
 */
public class GeneratorUtil {
    public static void main(String[] args) {
        // 数据库连接
        FastAutoGenerator.create("jdbc:mysql://localhost:3306/demo?serverTimezone=GMT%2B8&characterEncoding=utf8&useSSL=true", "lossdate", "123456")
                .globalConfig(builder -> {
                    // 设置作者
                    builder.author("sunyizhen011")
                            // 开启 swagger 模式
                            .enableSwagger()
                            // 覆盖已生成文件
                            .fileOverride()
                            // 指定输出目录
                            .outputDir("D://output//src//main//java//");
                })
                .packageConfig(builder -> {
                    // 设置父包名
                    builder.parent("com.lossdate.demo")
                            // 设置文件的包名
                            .entity("domain")
                            .mapper("dao")
                            .service("service")
                            .serviceImpl("service.impl")
                            .controller("controller")
                            .other("other")
                            // 设置文件生成路径
                            .pathInfo(new HashMap<OutputFile, String>(8) {
                                {
                                    put(OutputFile.xml,
                                            "D://output//src//main//resources//mapper");
                                    put(OutputFile.entity,
                                            "D://output//src//main//java//com//lossdate//demo//domain");
                                    put(OutputFile.controller,
                                            "D://output//src//main//java//com//lossdate//demo//controller");
                                    put(OutputFile.service,
                                            "D://output//src//main//java//com//lossdate//demo//service");
                                    put(OutputFile.serviceImpl,
                                            "D://output//src//main//java//com//lossdate//demo//service//impl");
                                    put(OutputFile.mapper,
                                            "D://output//src//main//java//com//lossdate//demo//dao");
                                }
                            });
                })
                .strategyConfig(builder -> {
                    // 设置需要生成的表名
                    builder.addInclude("user_salesman")
                            // 设置过滤表前缀
                            .addTablePrefix("", "")
                            // controller
                            .controllerBuilder()
                            .enableRestStyle()
                            // entity
                            .entityBuilder()
                            .enableLombok();
                })
                // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();
    }
}
